#pragma once

#include "algorithm"
#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

/*
 * 今天补充的题目是字符串相减，俗称大数相减。

如果你还没做过415. 字符串相加，建议先做一下。减法比加法稍微麻烦一点，但核心思路相似。

五分钟时间，带你掌握这道题~

题目描述
给定两个字符串形式的非负整数 num1 和num2 ，计算它们的差。

注意：

num1 和num2 都只会包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库
 *
 *
 *
 * */
//例如 311-99
string sub(string a, string b) {
    string fu;
    if (a < b) {
        swap(a, b);
        fu = "-";
    }

    //这里假如a>b了 每次从最后一位开始搞
    string res = "";
    int i = a.size() - 1;
    int j = b.size() - 1;

    int borrow = 0;
    while (i >= 0 || j >= 0) {
        //先获取int
        int x = i >= 0 ? a[i] - '0' : 0;
        int y = j >= 0 ? b[j] - '0' : 0;

        if (x - borrow - y >= 0) {

            int z = (x - borrow - y);
            res += z + '0';
            borrow = 0;
        } else {
            //说明需要借位311-99
            //我发现了最多借位1的
            x = x - borrow;
            borrow = 1;
            x = x + 10;//借位+10
            int z = (x - y);
            res += z + '0';
        }
        --j;
        --i;

    }
    std::reverse(res.begin(), res.end());

    for (int k = 0; k < res.size(); ++k) {
        if (res[k] == '0')
            res.erase(res.begin() + k);
    }

    if (res.empty())
        return "0";

    return fu + res;


}